﻿using System;
using System.IO;

using System.Configuration;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Kcadastro.classes;

namespace Kcadastro.os
{
    public partial class osView : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                if (Session["IDos"] != null)
                    if (Session["IDos"].ToString() != "")
                    {
                        tbi_idos.Text = Session["IDos"].ToString();
                        carregar();
                        Session.Remove("IDos");
                    }

                if (tbi_idos.Text == "")
                {
                    Response.Redirect("osList.aspx", true);
                }

                if (Session["msg"] != null)
                {
                    lt_msg.Text = Session["msg"].ToString();
                    Session.Remove("msg");
                }
            }

        }

        private void carregar()
        {



            tb_head.Text = "";
            oss o = new oss();
            tb_o to = o.lerOs(Convert.ToInt64(tbi_idos.Text));

            switch (to.stts)
            { 
                case 1:
                    dd_tpps.Enabled = true;
                    fu_original.Enabled = true;
                    bt_recargarArq.Enabled = true;
                    bt_validar.Enabled = true;
                    bt_orcamento.Enabled = true;
                    bt_aprovar.Visible = false;
                    break;
                case 2:
                    dd_tpps.Enabled = false;
                    fu_original.Enabled = false;
                    bt_recargarArq.Enabled = false;
                    bt_validar.Enabled = false;
                    bt_orcamento.Enabled = false;
                    bt_aprovar.Visible = true;
                    break;
                case 3:
                    dd_tpps.Enabled = false;
                    fu_original.Visible = false;
                    bt_recargarArq.Visible = false;
                    bt_validar.Visible = false;
                    bt_orcamento.Visible = false;
                    bt_aprovar.Visible = false;
                    break;
            }

            if (to.stts >= 2)
            {
                dd_tpps.Enabled = false;
                fu_original.Enabled = false;
                bt_recargarArq.Enabled = false;
                bt_validar.Enabled = false;
                bt_orcamento.Enabled = false;
            }

            dd_tpps.SelectedIndex = dd_tpps.Items.IndexOf(dd_tpps.Items.FindByValue(to.tpps.ToString()));

            tb_nome.Text = to.nomeOS.ToString();
            lt_status.Text = to.status;
            if (to.caminhoOriginal != "")
            {
                foreach (string s in o.headArquivo(to.PK_IDos, to.caminhoOriginal).ToList<string>())
                {
                    tb_head.Text = tb_head.Text + s + "\n";
                }
            }
            var a = from tb in to.tb_osXservs
                    select new
                    {
                        tb.tb_servico.nome
                    };

            cbl_servicos.DataSource = o.listaServicos((int) to.tpps);
            cbl_servicos.DataTextField = "nome";
            cbl_servicos.DataValueField = "PK_IDserv";
            cbl_servicos.DataBind();
   

            cbl_servicos.Items[0].Selected = true;
            cbl_servicos.Items[0].Enabled = false;

            List<tb_osXserv> ls = o.lerServicos(Convert.ToInt64(tbi_idos.Text));

            foreach (tb_osXserv ss in ls)
            {
                for (int i = 0; i < this.cbl_servicos.Items.Count; i++)
                {
                    if (cbl_servicos.Items[i].Value.ToString() == ss.FK_IDserv.ToString())
                    {
                        cbl_servicos.Items[i].Selected = true;
                    }
                    if (to.stts >= 2)
                    {
                        cbl_servicos.Items[i].Enabled = false;
                    }
                }
            }

            
            
            //bl_servicos.DataSource = a;
            //bl_servicos.DataTextField = "nome";
            //bl_servicos.DataBind();
            lt_qtdreg.Text = to.qtd_registros != null ? to.qtd_registros.ToString() : "";
            lt_arquivook.Text = (bool)to.arquivoOK ? "<font color=\"Olive\">Arquivo Válido</font>" : "<font color=\"red\">Arquivo Inválido</font>";
            if ((bool)to.arquivoOK)
            { bt_orcamento.Enabled = (to.stts == 2)? false: true; }
            else bt_orcamento.Enabled = false;
            lt_orcamento.Text = to.valorOrcamento > 0 ? String.Format("{0:C}" , to.valorOrcamento ): "Não Orçado.";
            o = null;
        }

        private void uploadArquivo()
        {
            lt_msg.Text = "";
            string path = ConfigurationManager.AppSettings["arqPath"].ToString() + Session["IDemp"].ToString() + "/" + tbi_idos.Text.ToString() + "/original.txt";
            oss o = new oss();
            //tb_o to = o.lerOs(Convert.ToInt64(tbi_idos.Text));
            if (fu_original.HasFile)
            {
                if (fu_original.FileName.Substring(fu_original.FileName.Length - 3, 3).ToUpper() == "CSV")
                {
                    fu_original.SaveAs(path); // ConfigurationManager.AppSettings["arqPath"].ToString() + to.FK_IDemp.ToString() + "/" + to.PK_IDos.ToString() + "/original.txt");
                    o.updateArqOriginal(Convert.ToInt64(tbi_idos.Text), path);
                    //dbiparser.importCSV imp = new dbiparser.importCSV();
                    //imp.validarArquivo(ConfigurationManager.AppSettings["arqPath"].ToString() + to.FK_IDemp.ToString() + "/" + to.PK_IDos.ToString() + "/original.txt", dd_tpps.SelectedValue.ToString());
                   // lt_msgarquivo.Text = imp.MSG.Replace("\n", "<br />");
                    validarArquivo();
                    //to.qtd_registros = imp.PROPRIEDADESARQUIVO.QTDREGISTROS - 1;
                    //to.arquivoOK = imp.PROPRIEDADESARQUIVO.HEADERVALIDO & imp.PROPRIEDADESARQUIVO.CORPOVALIDO;
                    //o.updateOS(to);
                }
                else
                {
                    lt_msg.Text = "Arquivo deve ser do tipo CSV";
                }
            }
            else
            {
                lt_msg.Text = "É necessário escolher um arquivo CSV para Regarregar.";
            }

            o = null;
           // to = null;
        }

        private void validarArquivo()
        {
            oss o = new oss();
            tb_o to = o.lerOs(Convert.ToInt64(tbi_idos.Text));
            importTXT itxt = new importTXT();
            itxt.validarArquivo(to.caminhoOriginal, dd_tpps.SelectedValue.ToString());
            //dbiparser.importCSV imp = new dbiparser.importCSV();
            //imp.validarArquivo(to.caminhoOriginal, dd_tpps.SelectedValue.ToString());
            bool arqok = itxt.PROPRIEDADESARQUIVO.HEADERVALIDO & itxt.PROPRIEDADESARQUIVO.CORPOVALIDO;
            lt_arquivook.Text = arqok ? "<font color=\"Olive\">Arquivo Válido</font>" : "<font color=\"red\">Arquivo Inválido</font>";
            lt_msgarquivo.Text = itxt.MSG.Replace("\n", "<br />");
            o.gravarReportErros(itxt.MSG, tbi_idos.Text.ToString(), Session["IDemp"].ToString());
            to.qtd_registros = itxt.PROPRIEDADESARQUIVO.QTDREGISTROS - 1;
            to.arquivoOK = itxt.PROPRIEDADESARQUIVO.HEADERVALIDO & itxt.PROPRIEDADESARQUIVO.CORPOVALIDO;
            o.updateOS(to);
            to = null;
            o = null;

        }

        protected void bt_validar_Click(object sender, EventArgs e)
        {

            validarArquivo();

        }

        protected void bt_recargarArq_Click(object sender, EventArgs e)
        {
            uploadArquivo();
            carregar();
        }

        protected void bt_orcamento_Click(object sender, EventArgs e)
        {
            lt_msg.Text = "";
            oss o = new oss();
            tb_o to = o.lerOs(Convert.ToInt64(tbi_idos.Text));
            to.stts = 2;
            to.status = "Processando Orçamento";
            o.updateOS(to);


            List<int> valores = new List<int>();
            for (int i = 0; i < this.cbl_servicos.Items.Count; i++)
            {
                if (cbl_servicos.Items[i].Selected)
                {
                    valores.Add(Convert.ToInt16(cbl_servicos.Items[i].Value));
                }
            }

            o.gravarServicos(Convert.ToInt64(tbi_idos.Text), valores.ToArray(), (int)to.qtd_registros);
            o.orcamento(Convert.ToInt64(tbi_idos.Text));

            to = null;
            o = null;
            carregar();
            lt_msg.Text = " Quando o orçamento estiver finalizado você será comunicado por email.";
        }

        protected void bt_aprovar_Click(object sender, EventArgs e)
        {
            oss o = new oss();
            tb_o to = o.lerOs(Convert.ToInt64(tbi_idos.Text));
            to.stts = 3;
            to.dt_proxExec = DateTime.Now.AddHours(1d);
            to.orcamentoOK = true;
            to.status = "Processamento agendado";
            o.updateOS(to);
            carregar();
        }

        protected void dd_tpps_SelectedIndexChanged(object sender, EventArgs e)
        {
            oss o = new oss();
            tb_o to = o.lerOs(Convert.ToInt64(tbi_idos.Text));
            to.tpps = Convert.ToInt16(dd_tpps.SelectedValue);
            o.updateOS(to);
            carregar();
        }
    }
}